#include <bits/stdc++.h>
using namespace std;

const int maxn = 100005;

// 定义区间的结构体
struct Interval {
    int start;
    int end;
};

// 自定义比较函数，用于排序
bool compareIntervals(const Interval& a, const Interval& b) {
    if (a.start == b.start) return a.end < b.end; // 如果开始时间相同，按结束时间排序
    return a.start < b.start; // 否则按开始时间排序
}

Interval t[maxn];
priority_queue<int, vector<int>, greater<int>> q;

int main() {
  // 输入区间数量和需要维护的区间数量
  int n, k;
  int ans = 0;
  cin >> n >> k;
  
  // 输入每个区间的开始和结束
  for (int i = 0; i < n; i++)
    cin >> t[i].start >> t[i].end;
  
  // 按照自定义的比较函数进行排序
  sort(t, t + n, compareIntervals);
  
  // 维护一个小根堆，存储区间的结束
  for (int i = 0; i < n; i++) {
    q.push(t[i].end);
    
    // 如果堆的大小超过k，弹出最小的结束时间
    if (q.size() > k)
      q.pop();
    
    // 当堆里有k个元素时，更新答案
    if (q.size() == k)
      ans = max(ans, q.top() - t[i].start);
  }
  
  // 输出结果
  cout << ans << endl;
  return 0;
}